



import bpy
from bpy.types import Operator
from 全局控制.Node.节点和插座基类.bl_UpdateNode import *
import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类
import 全局控制.Node.插座.bl_插座基类 as 插件基类

from 全局控制.Node.节点数据类型 import bl_集合数据类型



import pdb

def f_update_更改数据类型(self, context):
	pass
	#self.outputs['元素序列'].f_set维度(1, self.m_数据Type)
	#self.m_数据Type
	#for t in bl_集合数据类型.E_数据类型枚举 :
	#	t[0] == ''

class C_SN_T数据容器(基类.C_SN_基类):
	bl_dname = 'bl_node_模板容器'
	bl_label = '模板容器'
	
	#m_Value = bpy.props.CollectionProperty(type=bl_集合数据类型.C_物体组元素)
	m_数据Type = bpy.props.EnumProperty(items=bl_集合数据类型.E_数据类型枚举, update=f_update_更改数据类型 )
	def init(self, context):
		super(C_SN_T数据容器, self).f_init(context)
		
		self.inputs.new('C_NS_List_T', name='初始化序列')
		self.inputs.new('C_NS_List_T', name='添加元素')
		self.inputs.new('C_NS_List_T', name='删除元素')
		
		self.outputs.new('C_NS_List_T', name='元素序列')

	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_数据Type')
		
	def f_删除元素(self, id):
		pass
	
	def f_update(self, 是否向下传递=False, input插座=None):
		#pdb.set_trace()
		if input插座 :
			if input插座.name == '初始化序列':
				self.outputs['元素序列'].f_set维度(1, self.m_数据Type)
				self.outputs['元素序列'].f_setData(input插座.f_getData())

			elif input插座.name == '添加元素':
				objs = input插座.f_getData()
				self.outputs['元素序列'].f_addData(objs)

			elif input插座.name == '删除元素':
				删除ID = input插座.f_getData()
				for e in 删除ID:
					self.f_删除单个元素(e)
		
				
		super(C_SN_T数据容器, self).f_update(是否向下传递, input插座)
		#print('物体数据容器 update')
		
	def f_删除单个元素(self, 删除ID):
		if 删除ID.__class__.__name__ == 'int' :
			if 删除ID >= 0 :
				self.outputs['元素序列'].f_pop多Data([删除ID])
		elif 删除ID.__class__.__name__ == 'Object':
			self.outputs['元素序列'].f_popData(删除ID.name)
		#print('B= ', 删除ID.__class__.__name__)

class C_NODE_AddMenu_T数据容器(bpy.types.Operator):
	bl_idname = 'node.global_node_template_data_container_add'
	bl_label = '模板数据容器'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_SN_T数据容器', use_transform=True)
		return {'FINISHED'}





class C_SN_T数据容器(基类.C_SN_基类):
	bl_dname = 'bl_node_模板容器'
	bl_label = '模板容器'
	
	#m_Value = bpy.props.CollectionProperty(type=bl_集合数据类型.C_物体组元素)
	m_数据Type = bpy.props.EnumProperty(items=bl_集合数据类型.E_数据类型枚举, update=f_update_更改数据类型 )
	def init(self, context):
		super(C_SN_T数据容器, self).f_init(context)
		
		self.inputs.new('C_NS_List_T', name='初始化序列')
		self.inputs.new('C_NS_List_T', name='添加元素')
		self.inputs.new('C_NS_List_T', name='删除元素')
		
		self.outputs.new('C_NS_List_T', name='元素序列')

		self.inputs['初始化序列'].f_set功能状态(1)


	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_数据Type')
		
	def f_删除元素(self, id):
		pass
	
	def f_update(self, 是否向下传递=False, input插座=None):
		#pdb.set_trace()
		if input插座 :
			if input插座.name == '初始化序列':
				self.outputs['元素序列'].f_set维度(1, self.m_数据Type)
				self.outputs['元素序列'].f_setData(input插座.f_getData())

			elif input插座.name == '添加元素':
				objs = input插座.f_getData()
				self.outputs['元素序列'].f_addData(objs)

			elif input插座.name == '删除元素':
				删除ID = input插座.f_getData()
				for e in 删除ID:
					self.f_删除单个元素(e)
		
				
		super(C_SN_T数据容器, self).f_update(是否向下传递, input插座)
		#print('物体数据容器 update')
		
	def f_删除单个元素(self, 删除ID):
		if 删除ID.__class__.__name__ == 'int' :
			if 删除ID >= 0 :
				self.outputs['元素序列'].f_pop多Data([删除ID])
		elif 删除ID.__class__.__name__ == 'Object':
			self.outputs['元素序列'].f_popData(删除ID.name)
		#print('B= ', 删除ID.__class__.__name__)

class C_NODE_AddMenu_T数据容器(bpy.types.Operator):
	bl_idname = 'node.global_node_template_data_container_add'
	bl_label = '模板数据容器'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_SN_T数据容器', use_transform=True)
		return {'FINISHED'}
		

classes = (
	C_SN_T数据容器,
	C_NODE_AddMenu_T数据容器,
	
)




def register():
	for c in classes:
		bpy.utils.register_class(c)
		

def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)

	

